package com.yuuko.yuukoapi.common.utils

import java.util.Base64
import javax.crypto.Cipher
import javax.crypto.spec.SecretKeySpec

object AesEncryptUtils {

    val deviceAseKey = "4d126151e78f490db6b8155bfec85ec3"

    /**
     * 加密方法：传入明文字符串，返回加密后的 Base64 字符串。
     */
    fun encrypt(content: String, keyString: String): String {
        return try {
            // 确保密钥长度为 16 字节（128 位）
            val key = SecretKeySpec(keyString.toByteArray(Charsets.UTF_8), "AES")

            // 使用 AES/ECB/PKCS5Padding 模式
            val cipher = Cipher.getInstance("AES/ECB/PKCS5Padding")
            cipher.init(Cipher.ENCRYPT_MODE, key)

            // 加密
            val encryptedBytes = cipher.doFinal(content.toByteArray(Charsets.UTF_8))

            // 返回 Base64 编码的加密结果
            Base64.getEncoder().encodeToString(encryptedBytes)
        } catch (e: Exception) {
            println("AES encode error: ${e.message}")
            "" // 如果加密失败，返回空字符串
        }
    }

    /**
     * 解密方法：传入 Base64 编码的加密字符串，返回解密后的明文字符串。
     */
    fun decrypt(encryptedText: String, keyString: String): String {
        return try {
            // 确保密钥长度为 16 字节（128 位）
            val key = SecretKeySpec(keyString.toByteArray(Charsets.UTF_8), "AES")

            // 使用 AES/ECB/PKCS5Padding 模式
            val cipher = Cipher.getInstance("AES/ECB/PKCS5Padding")
            cipher.init(Cipher.DECRYPT_MODE, key)

            // 解码 Base64
            val decodedBytes = Base64.getDecoder().decode(encryptedText)

            // 解密
            val decryptedBytes = cipher.doFinal(decodedBytes)

            // 返回解密后的明文
            String(decryptedBytes, Charsets.UTF_8)
        } catch (e: Exception) {
            println("AES decode error: ${e.message}")
            "" // 如果解密失败，返回空字符串
        }
    }

    fun encryptDeviceCode(code: String): String {
        return encrypt(code, deviceAseKey)
    }
}